<!DOCTYPE html>

<html>

	<head>
		<meta charset="utf-8">
		<title> 命令模拟器命令调试文档 </title>
        <link href="../css/wendang.css" rel="stylesheet" type="text/css" media="all" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
	</head>
        
    <body style="width: 80%; margin: 0px auto;">
        <div class="menu">
            <div id="menu_1">
                <div class="menu_1">
                    <div onclick="display_thing('main_1');">命令运行</div>
                    <div onclick="display_thing('main_2');">命令方块</div>
                    <div onclick="display_thing('main_3');">MC函数</div>
                    <div onclick="display_thing('main_4');">终端命令</div>
                </div>
                <div class="menu_1">
                    <div onclick="display_thing('main_5');">命令须知</div>
                </div>
            </div>
            <div style="text-align: center; background-color: rgb(62, 94, 7); color: white; display: flex;">
                <div onclick="close_menu()" style="padding: 3px 0px; width: 50%; border-right: 3px solid white;" id="button_1">点击收入菜单</div>
                <div onclick="website1()" style="padding: 3px 0px; width: 50%;">点击返回主页</div>
            </div>
        </div>

        <div id="top_blank" style="height: 80px;"></div>

        <div id="main_text" style="width: 95%; margin: 0px auto;">

            <div id="main_1" >
                <h1 style="text-align: center;">命令运行</h1>
                <p>
                    &emsp;&emsp;命令模拟器支持以下命令运行的方式：①命令方块；②发送命令窗口；③函数命令
                </p>
                <div style="text-align:center"><img src="../picture/tutorial/send_command.jpg" alt="" width="250" height="450"></div>
                <div style="text-align:center">发送命令窗口</div>
                <p>&emsp;&emsp;<samp class="red_text">命令模拟器的发送命令窗口支持运行调试命令、终端命令和MC原版命令(可以不加/)。</samp></p>
                <p>
                    &emsp;&emsp;命令模拟器支持读取行为包，资源包中新增的项目(<samp class="red_text">仅限于注册ID</samp>)：
                    动画、动画控制器、迷雾、粒子、声音、音乐、功能域、方块、物品、实体、战利品表、交易表、场景文件、摄像头预设。
                </p>
                <p>
                    &emsp;&emsp;命令模拟器支持对用户的命令进行语法检查，根据版本判断命令的语法，这将影响命令的语法检查和命令最终的运行效果。
                    命令在世界内运行并影响世界数据，用户可根据生成的反馈信息检查命令的对错与否。
                </p>
            </div>

            <div id="main_2" style="display: none;" >
                <h1 style="text-align: center;">命令方块</h1>
                <p>
                    &emsp;&emsp;命令模拟器通过txt文件在世界内注册命令方块。你可以在<samp class="red_text">save_world/世界名字/command_blocks</samp>下创建txt文件开始编写命令方块。
                    所有在这个目录下的txt文件都会参与注册命令方块。
                </p>
                <p>&emsp;&emsp;命令模拟器生成的世界会将主世界维度的x为1600 ~ 1695，z为1600 ~ 1695的区域设置为命令方块部署区域，超出该区域的命令方块将不再运行。</p>
                <h1 style="text-align: center;">注册语法</h1>
                <p>&emsp;&emsp;注册命令方块支持的语法有以下四种：</p>
                <div style="background-color: rgb(255, 255, 255);">
                    <p>
                        &emsp;① start &#60;posx&#62; &#60;posy&#62; &#60;posz&#62;<br>
                        &emsp;② [方向,属性] [MC命令]<br>
                        &emsp;&emsp; [MC命令]<br>
                        &emsp;&emsp; [MC命令]<br>
                        &emsp;&emsp; ........<br>
                        &emsp;③ [方向,属性] empty<br>
                        &emsp;④ #注释内容<br>
                    </p>
                </div>
                <p>
                    &emsp;&emsp;start语法表示从某个局部位置开始部署命令方块，局部位置一定要满足以下条件：<samp class="red_text">x为0到95，y为-64到319，z为0到95。在世界内的命令方块将在(1600,-64,1600)加上局部位置后开始布置。</samp><br>
                    &emsp;&emsp;方向是必填参数，表示从start位置开始，朝什么方向布置命令方块，命令方块自身的朝向也由该参数决定。可填参数<samp class="red_text">x+、x-、y+、y-，z-，z+、0、1、2、3、4、5。</samp>
                    属性是选填参数，表示该位置的命令方块具体设置，可填参数<samp class="red_text">(循环/连锁/脉冲)(有条件/无条件)(红石/常开)(延时)，参数可以使用逗号或分号隔开。</samp><br>
                    &emsp;&emsp;语法③用于插入一个空白的命令方块。<br>
                    &emsp;&emsp;语法④用于插入一行注释内容，注释不影响命令方块的结构。<br><br>
                    &emsp;&emsp;默认的属性是[连锁，无条件，常开，0]，如果指定新的属性则会覆盖默认属性，
                    当下一条MC命令没有指定方向和属性参数时，则会使用最后一次设置的方向和属性参数。下面将使用一个例子进行解析。<br>
                </p>
                <div style="background-color: white;"><code>
                    # 设置起始位置 1602 -60 1625<br>
                    <span class="blue_text">start 2 -60 25</span><br>
                    # 位置1602 -60 1625为无条件常开延时为0的脉冲命令方块(朝向y+)<br>
                    <span class="blue_text">[y+,脉冲,无条件，0]say aaaa</span><br>
                    # 位置1602 -59 1625为有条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">[y+,连锁，有条件，0]testfor aaaa</span><br>
                    # 位置1602 -58 1625为有条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">testfor bbbb</span><br>
                    # 位置1602 -57 1625为有条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">testfor bbbb</span><br>
                    <br><br>
                    # 起始命令方块的位置 1622 -40 1676<br>
                    <span class="blue_text">start 1622 -40 1676</span><br>
                    # 位置1622 -40 1676为无条件常开延时为0的脉冲命令方块(朝向y+)<br>
                    <span class="blue_text">[y+,脉冲,无条件，0]say aaaa</span><br>
                    # 位置1622 -39 1676为无条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">[y+,连锁]say aaaa</span><br>
                    # 位置1622 -38 1676为无条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">say aaaa</span><br>
                    # 位置1622 -37 1676为无条件常开延时为0的连锁命令方块(朝向y+)<br>
                    <span class="blue_text">say aaaa</span><br>
                </code></div>
                <p>
                    &emsp;&emsp;编辑完成命令方块文件后，用户需要在发送命令窗口运行“#reload”<samp class="red_text">终端命令</samp>来对文件进行语法检查，检查通过后，
                    命令方块才会写入世界。<samp class="red_text">注意：注册完成并写入游戏的红石控制命令方块只能接受红石块的激活响应。</samp>
                </p>
            </div>

            <div id="main_3" style="display: none;" >
                <h1 style="text-align: center;">MC函数</h1>
                <p>&emsp;&emsp;命令模拟器可以读取行为包中的函数并正常执行，用户想要载入函数，首先应该先制作行为包。</p>
                <p>
                    &emsp;&emsp;命令模拟器位于main.py目录中，在functionality文件夹内会自动生成example文件夹。example文件夹里的example_bp就是一个行为包的模板，
                    用户可以直接将该行为包复制进save_world\世界名字\behavior_packs内。
                </p>
                <p>
                    &emsp;&emsp;如果用户想执行某一个版本的命令语法，请打开行为包内的manifest.json，找到min_engine_version参数并修改即可。
                    execute新语法需要将min_engine_version参数设置为[1,19,50]及以上。
                    min_engine_version参数设置完成后，在functions里就可以开始编辑的理想中的MC函数了。
                </p>
                <p>&emsp;&emsp;编辑完成函数文件后，你需要在发送命令窗口运行“#reload”终端命令来对文件进行语法检查，检查通过后，函数才会写入世界。</p>
            </div>

            <div id="main_4" style="display: none;" >
                <h1 style="text-align: center;">终端关键字</h1>
                <p>&emsp;&emsp;终端关键字是对终端命令进行控制的语法关键字，命令模拟器支持以下两种语法关键字。</p>
                <div style="background-color: white;">
                    <p>
                        &emsp;① pass &#60;int&#62;<br>
                        &emsp;② end
                    </p>
                </div>
                <p>
                    &emsp;&emsp;pass是跳过指令，int代表跳过几行终端，调试或MC指令。<br>
                    &emsp;&emsp;end是提前结束指令，当遇到end关键字时，终端命令终止运行。
                </p>

                <h1 style="text-align: center;">终端命令</h1>
                <p>&emsp;&emsp;终端命令是命令模拟器对与调试参数设置的内置特殊命令，命令模拟器支持以下终端命令。如果以#开头但并不符合以下终端命令的格式，将会当做注释处理。</p>
                <h3>#reload</h3>
                <p>格式: #reload [open_cb_view] [transfor]</p>
                <p>
                    &emsp;&emsp;将行为包中的函数和用户的命令方块注册文件全部重新进行语法检查和加载。
                    如果含有语法错误，则会在检查完毕后自动弹出语法反馈的窗口。
                    只有在语法检查完全通过后，文件数据才能被写入世界、生成命令方块视图、以及创建bdx。<br>
                    &emsp;&emsp;open_cb_view参数可以填 true 和 false ，在ture下会自动打开命令方块视图。
                    如果有注册命令方块的操作，可以查看命令方块1:1大致渲染图。否则只会渲染黑幕。<br>
                    &emsp;&emsp;transfor参数可以填 none、bdx、mcstructure ,transfor指定的是命令方块文件导出的文件格式，
                    导出的文件将生成在 functionality/structure_output 路径下。
                </p>
                
                <h3>#set</h3>
                <p>
                    格式1: #set command_version &#60;int&#62; &#60;int&#62; &#60;int&#62;<br>
                    格式2: #set test_time &#60;int&#62;
                    格式3: #set response_web &#60;bool&#62;
                </p>
                <p>
                    &emsp;&emsp;command_version是设定命令对应游戏版本，命令的语法将会根据设置的版本进行运行。<br>
                    &emsp;&emsp;test_time是设定命令测试的总时长，当test_time设置为大于0的时候，所有命令设施开始运行，
                    在测试过程中会记录所有命令运行的反馈，测试时间到后会跳转至命令反馈页面。<br>
                    &emsp;&emsp;response_web是设定命令测试完成后是否自动跳转命令反馈网页，
                    每一次进入世界时都不会自动跳转，需要用户执行命令开启自动跳转。
                </p>

                <h3>#command</h3>
                <p>
                    格式1: #command loop &#60;command&#62;<br>
                    格式2: #command delay &#60;int&#62; &#60;command&#62;<br>
                    格式3: #command end &#60;command&#62;
                </p>
                <p>
                    &emsp;&emsp;loop是设定哪些MC命令在测试过程中需要每刻都运行。<br>
                    &emsp;&emsp;delay是设定哪些MC命令在延时后的游戏刻运行，用于测试某些条件触发的功能。<br>
                    &emsp;&emsp;end是设定哪些MC命令在测试完成后运行的命令，用于快速查看运行结果。
                </p>
            </div>

            <div id="main_5" style="display: none;" >
                <h1 style="text-align: center;">命令须知</h1>
                <p>
                    &emsp;&emsp;一些命令并没有完全模拟其特性，这些命令将在下方一一陈述。
                </p>

                <h3>/structure</h3>
                <p>
                    该命令无法对方块的方向进行旋转。
                </p>

                <h3>/damage</h3>
                <p>
                    该命令无法做出准确的伤害计算。
                </p>

                <h3>其他待补充</h3>
            </div>
        </div>
        
        <div style="height: 30px;"></div>

    </body>

    <script>
        var count_1 = 0 ;
        function close_menu(){
            if (count_1 == 0){
                document.getElementById('menu_1').style.display = "none";
                document.getElementById('button_1').innerHTML = "点击展开菜单";
                document.getElementById('top_blank').style.height = "20px";
            }
            else{
                document.getElementById('menu_1').style.display = "";
                document.getElementById('button_1').innerHTML = "点击收入菜单"
                document.getElementById('top_blank').style.height = (document.getElementById('menu_1').clientHeight + 20).toString() + "px"
            }
            count_1 ++; count_1 %= 2;
        }
        function website1(){window.location.href='http://localhost:32323';}
    </script>

    <script>
        if (window.innerWidth > 700) {document.getElementById('main_text').style.width = "700px";}  
        function display_thing(id1){
            array1 = ['main_1','main_2','main_3','main_4','main_5','main_6'];
            document.body.scrollTop = 0; 
            document.documentElement.scrollTop = 0;
            for (let index = 0; index < array1.length; index++) {
                if (id1 == array1[index]) document.getElementById(array1[index]).style.display = "";
                else document.getElementById(array1[index]).style.display = "none";
            }
        }
    </script>

</html>